# 拉取 Golang 环境（小镜像）
FROM crpi-cb1t6ui6q7epw7vo.cn-chengdu.personal.cr.aliyuncs.com/worklz/golang:alpine AS builder
MAINTAINER worklz

# 关闭 CGO（静态编译，避免依赖系统库）
ENV CGO_ENABLED=0
# 国内代理加速依赖拉取
ENV GOPROXY=https://goproxy.cn,direct
# 更换 Alpine 镜像源（加速 apk 安装）
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

# 设置工作目录
WORKDIR /build

# 先复制依赖文件（利用 Docker 缓存，避免每次代码变动都重新下载依赖）
COPY go.mod go.sum ./
# 下载依赖（关键步骤：确保所有依赖提前拉取）
RUN go mod download

# 复制所有源码（此时依赖已缓存，仅代码变动时重新编译）
COPY . .

# 编译并输出详细日志（-v 显示编译过程，-o 指定输出文件，若入口在子目录需修改路径，如 ./cmd/server）
RUN go build -v -o main

# 构建运行时镜像（极小镜像）
FROM crpi-cb1t6ui6q7epw7vo.cn-chengdu.personal.cr.aliyuncs.com/worklz/alpine
WORKDIR /app

# 配置时区（东八区）
RUN apk add --no-cache tzdata && \
    ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

# 复制编译产物和必要目录
# pkg里有初始化的sql文件和一些静态文件
COPY --from=builder /build/main /app/
COPY config /app/config
COPY pkg /app/pkg
COPY resource /app/resource
COPY storage /app/storage

# 暴露端口
EXPOSE 8085

# 可挂载目录（配置、数据持久化）
VOLUME ["/app/config", "/app/storage", "/app/resource", "/app/pkg/yunj/resource"]

# 启动命令
CMD ["./main"]